/**
 * Captain
 * © 2017 Captain copyright，All rights reserved.
 * http://www.sccaptain.com.cn
 *
 * JAVA : 8
 * 文  件  名: DateUtils.java
 * 创  建  人: sunfeng (sun.feng@sccaptain.com.cn)
 * 创建时间: 2017年7月12日 下午2:03:24
 * 版         本: 1.0.0
 * 备         注:
 * 修订历史:
 */
package com.material.c2c.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.apache.commons.lang3.StringUtils;
import org.springframework.util.Assert;

/**
 * 日期操作的工具类
 *
 * @since 1.0
 * @version 1.0
 * @author sunfeng (sun.feng@sccaptain.com.cn)
 */
public class DateUtils {
  /**
   * 判断一个自然日是否为工作日
   *
   * @param date
   *          需要进行判断的日期
   * @return true为工作日，false为非工作日
   */
  public static boolean isWorkDay(Date date) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    int dayInWeek = cal.get(Calendar.DAY_OF_WEEK) - 1;
    // 等于0或者6表示日期为周末
    if (dayInWeek == 0 || dayInWeek == 6) {
      return false;
    }
    return true;
  }

  /**
   * 日期转换为字符串
   *
   * @param date
   *          日期
   * @param pattern
   *          日期格式
   * @return 字符串
   */
  public static String date2Str(Date date, String pattern) {
    Assert.notNull(date, "日期对象不能为空");
    Assert.notNull(pattern, "日期格式不能为空");
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
    return simpleDateFormat.format(date);
  }

  /**
   * 字符串转换成日期
   *
   * @param dateStr
   *          日期字符串
   * @param pattern
   *          日期格式
   * @return
   */
  public static Date str2Date(String dateStr, String pattern) {
    if (StringUtils.isBlank(dateStr) || StringUtils.isBlank(pattern)) {
      return null;
    }
    Date date = null;
    try {
      SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
      date = simpleDateFormat.parse(dateStr);
      return date;
    } catch (ParseException e) {
      e.printStackTrace();
    }
    return null;
  }

  /**
   * 获取两个日期间间隔的天数
   * @param start
   * @param end
   * @return
   */
  public static int getInterval(Date start, Date end) {
    Calendar startCal = Calendar.getInstance();
    startCal.setTime(start);

    Calendar endCal = Calendar.getInstance();
    endCal.setTime(end);
    int startDay = startCal.get(Calendar.DAY_OF_YEAR);
    int endDay = endCal.get(Calendar.DAY_OF_YEAR);

    int startYear = startCal.get(Calendar.YEAR);
    int endYear = endCal.get(Calendar.YEAR);
    if (startYear != endYear) {
      int timeDistance = 0;
      for (int i = startYear; i < endYear; i++) {
        if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
          timeDistance += 366;
        } else {
          timeDistance += 365;
        }
      }
      return timeDistance + (endDay - startDay);
    } else {
      return endDay - startDay;
    }
  }

}
